package main

import "fmt"

func main() {
	//2、若有一个字符串aaabbbdcdsasfasfasfbbghjtttwwr，要求返回哪个字母最多以及该字母的个数？
	// 利用map中key值相同会覆盖的性质，记录所有出现的字符次数
	// 判断出现次数最多的字符
	// 找出最大值，以及它的出现次数

	str := "aaabbbdcdsasfasfasfbbghjtttwwr"
	str2 := []rune(str) //字符串遍历
	fmt.Println(str2)
	statisticsMap := make(map[int]int) //使用map存放出现数字as码及出现次数
	var s2 []int
	var s3 []int
	var maxInt int

	// 遍历转义后的字符，转义后也是字符格式
	// 统计每个字符出现的次数
	for _, v := range str2 {
		if statisticsMap[int(v)] != 0 { //不为空
			statisticsMap[int(v)]++
		} else {
			statisticsMap[int(v)] = 1
		}
	}
	fmt.Println("statisticsMap:", statisticsMap)

	// 判断出现次数最多的字符
	// 将对应的次数放进切片中
	for _, v := range statisticsMap {
		s2 = append(s2, v)
	}

	maxInt = s2[0]
	// 找出最大值
	// 遍历所有次数，如果有比初始值大的就覆盖
	for i := 0; i < len(s2); i++ {
		if maxInt < s2[i] {
			maxInt = s2[i]
		}
	}

	// 遍历Map集合，匹配该最多次数有哪些字符，将字符存进切片中
	for k, v := range statisticsMap {
		if v == maxInt {
			s3 = append(s3, k)
		}
	}
	fmt.Println("maxInt:", maxInt) //最大出现次数
	fmt.Printf("s3: %c", s3)       //使用ascii码输出
}
